package com.qianfeng1.day8_wednesday.reflect.clazz.field;


import com.qianfeng1.day8_wednesday.reflect.clazz.Member;

import java.lang.reflect.Field;

/**
 * 作者：黎杭
 * 日期：2020/2/19
 */
public class TestField {

    public static void main(String[] args) throws Exception {

        Member m = new Member();
        m.setName("李红哈哈");
        m.setAge(999);

        // 要用反射，第一步：永远都是先拿到Class对象
        Class cls = Member.class;
        // 现在要获取本类成员，不是继承的
        Field x = cls.getDeclaredField("name");
        System.err.println(x.getName());
        System.err.println(x.getType());// 获取成员的类型，返回Class对象
        // 非要访问这个成员，没有一切能够拦得住反射

        x.setAccessible(true);// 进行解封操作

        Object o = x.get(m);// 获取成员的值，获取谁的指，传递的那个对象的这个成员的值

        System.err.println(o);
        // 有get有没有set呢？
        //   public void set(Object obj, Object value)
        // 这个方法可以给成员设置值，第一个参数是给哪个对象的这个成员设置值，第二个参数是值

        // 查询数据之后，创建的Member

        Member m1 = (Member) cls.newInstance();

        x.set(m1, "李红嘻嘻");// 就是给m1这个对象的name属性设置值

        System.err.println(m1.getName());// 获取m1的名字


        Field y = cls.getDeclaredField("age");
        System.err.println(y.getName());
        System.err.println(y.getType());// 获取成员的类型，返回Class对象


    }
}
